home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / ultra250.zip / UW.H < prev    next >
Text File  |  1992-11-03  |  17KB  |  441 lines

  1. /****************************************************************************/
  2. /*                                                                                                                                                    */
  3. /* UW.H                                                                                                                                            */
  4. /*                                                                                                                                                    */
  5. /* This is the main header for uWin, containing all the defines and                    */
  6. /* typedefs for the program.                                                                                                */
  7. /*                                                                                                                    Kevin Huck            */
  8. /*                                                                                                                    Boyd Gafford        */
  9. /*                                                                                                                                                    */
  10. /****************************************************************************/
  11. #ifndef __UW_H
  12. #define __UW_H
  13.  
  14. #include <dos.h>                            /* for the REGS definition used for mouse int    */
  15. #include <stdlib.h>
  16. #include <time.h>
  17. #include <conio.h>
  18. #include <string.h>
  19. #include <ctype.h>
  20.  
  21. #ifndef __ZTC__
  22. #ifdef M_I86                                /* Microsofts are malloc.h and memory.h        */
  23.     #include <malloc.h>
  24.     #include <memory.h>
  25.     #include <sys\types.h>
  26.     #pragma pack(1)
  27. #else                                                /* Borlands are alloc.h and mem.h              */
  28.     #include <alloc.h>
  29.     #include <mem.h>
  30. #endif
  31. #endif
  32.  
  33. #ifdef M_I86
  34. #include <stddef.h>
  35. #define setmem(p,c,v)                memset((p),(v),(c))
  36. #define movmem(s,d,c)                memmove((d),(s),(c))
  37. #define random(x)               (rand() % (x))
  38. #define bioskey(c)                    _bios_keybrd(c)
  39. #define biosprint(s, d, p)    _bios_printer(s, p, d)
  40. #define getvect(i)          _dos_getvect(i)
  41. #define setvect(i,hdlr)     _dos_setvect(i,hdlr)
  42. #define enable              _enable
  43. #define disable             _disable
  44. #define setcolor            _setcolor
  45. #define moveto              _moveto
  46. #define lineto              _lineto
  47. #define outbyte outp
  48. #define inbyte  inp
  49. #define outword outpw
  50. #define inword  inpw
  51. struct  REGPACK {
  52.     unsigned    r_ax, r_bx, r_cx, r_dx;
  53.     unsigned    r_bp, r_si, r_di, r_ds, r_es, r_flags;
  54. };
  55. enum COLORS {
  56.     BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN,
  57.     LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN,
  58.     LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE
  59. };
  60. #define C80  3
  61. #define BW80 2
  62. #define MONO 7
  63. #else
  64. #define outbyte outportb
  65. #define inbyte  inportb
  66. #define outword outport
  67. #define inword  inport
  68. #endif
  69.  
  70. #ifdef __POWERC
  71.     #define C80     3
  72.     #define BW80  2
  73.     #define MONO    7
  74. enum COLORS {
  75.     BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN,
  76.     LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN,
  77.     LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE
  78. };
  79. #endif
  80.  
  81. #ifdef __ZTC__
  82. #include <int.h>
  83. #define interrupt
  84. #define O_TRUNC 0
  85. #define O_BINARY 0
  86. #define enable  int_on
  87. #define disable int_off
  88. #endif
  89.  
  90. /*-------------------------------- debug defines ---------------------------*/
  91. #ifdef ENQ_DEBUG 
  92. #define DBG_POP()  dbg_pop()
  93. #define ENQ_ERROR( p1, p2, s1, s2, p ) enq_error( p1, p2, s1, s2, p )
  94. #define WNP_VLD( s, m, wnp )           wnp_vld( s, m, wnp )
  95. #define PRTP_VLD( s, m, prtp )         prtp_vld( s, m, prtp )
  96. #define P_VLD( s, gp )                 p_vld( s, gp )
  97. #define MENUP_VLD( s, m, menup )       menup_vld( s, m, menup )
  98. #define DBG_LOG( fname )               dbg__log( fname )
  99. #else
  100. #define DBG_POP()
  101. #define ENQ_ERROR( p1, p2, s1, s2, p )
  102. #define WNP_VLD( s, m, wnp )
  103. #define PRTP_VLD( s, m, prtp )
  104. #define P_VLD( s, gp )
  105. #define MENUP_VLD( s, m, menup )
  106. #define DBG_LOG( fname )
  107. #endif
  108.  
  109.  
  110. /*------------------------ rectangle operation defines ---------------------*/
  111. #define     NO_OVERLAP            0
  112. #define        OVERLAP                    1
  113. #define        FIRST_ENCLOSED    2
  114. #define        SECOND_ENCLOSED    3
  115.  
  116. /*---------------------------- general defines -----------------------------*/
  117. #define   ON        1
  118. #define   OFF       0
  119. #define   UP        0
  120. #define   DOWN      1
  121. #define   LEFT      2
  122. #define   RIGHT     3
  123.  
  124. /*------------------------------ menuing defines ---------------------------*/
  125. #define     M_HORIZONTAL            0
  126. #define     M_VERTICAL                1
  127. #define     M_MAX_ENTRIES            20
  128. #define        M_GET_EVENT                0
  129. #define        M_PROC_EVENT            1
  130. #define        M_EXIT_ON_ESC         1
  131.  
  132.  
  133. /*---------------------------- mouse defines -------------------------------*/
  134. #define        TDELAY (clock_t) 4    /* clock ticks to check for multiple clicks        */
  135. #define        LB                0                    /* m_event->flag is 4 for left button                 */
  136. #define        MB                2                    /* m_event->flag is 64 for middle button            */
  137. #define        RB                1                    /* m_event->flag is 16 for right button                */
  138.  
  139. /*---------------------------- window defines ------------------------------*/
  140. #define   NO_BDR    0
  141. #define   SGL_BDR   1
  142. #define   DBL_BDR   2
  143. #define   SLD_BDR   3
  144. #define        DUAL_BDR    4
  145.  
  146. #define   CENTERED   -1
  147. #define   LEFT_JUST  -2
  148. #define   RIGHT_JUST -3
  149.  
  150. #define     ALPHA           'A'
  151. #define     DIGITS       'D'
  152. #define     C_LINE            0
  153. #define     C_SBLOCK    1
  154. #define     C_FBLOCK    2
  155.  
  156. #define   IN             0
  157. #define   OUT              1
  158. #define   BUFF             0
  159. #define   SAVE            1
  160.  
  161. #define        WN_POPUP    1
  162. #define        WN_NORMAL    0
  163.  
  164. #define   DELETE    1
  165. #define   INSERT    0
  166.  
  167. #define   STRIP_ON  1
  168. #define   STRIP_OFF 0
  169.  
  170. /*----------------------- printer support defines --------------------------*/
  171. #define PRT_BLOCK 2048
  172. #define MAX_PRINTERS 4
  173.  
  174. #define BLOCK_SIZE 512
  175.  
  176. #define READ  0
  177. #define WRITE 1
  178.  
  179. /*------------------------- flags for wn_gets_ll ---------------------------*/
  180. #define G_STRIP          0x0001
  181. #define G_STRIP_END      0x0002
  182. #define G_UP_FST_CHAR    0x0004
  183. #define G_ARROW          0x0008
  184. #define G_VALIDATE       0x0010
  185. #define G_RIGHT_TO_LEFT  0x0020
  186. #define G_EXIT_ON_FILL   0x0040
  187. #define G_CLEAR_ON_FIRST 0x0080
  188. #define G_UP_FST_CHAR2   0x0100
  189. #define G_MOVE_TO_END    0x0200
  190. #define G_INSERT         0x0400
  191.  
  192.  
  193. #define H_ENTRY          0
  194. #define H_PROCESS        1
  195. #define H_EXIT           2
  196.  
  197. /*-------------------------- base level typedefs ---------------------------*/
  198. typedef unsigned char uchar;
  199. typedef unsigned int  uint;
  200. typedef unsigned long ulong;
  201.  
  202. /*---------------------------- mouse structures ----------------------------*/
  203. typedef struct reset_struct
  204. {
  205.     int exists;
  206.     int n_buttons;
  207. } M_RESET;
  208.  
  209. typedef struct loc_struct
  210. {
  211.     int button_status;
  212.     int count;
  213.     int col;
  214.     int row;
  215. } M_LOC;
  216.  
  217. typedef struct move_struct
  218. {
  219.     int h_count;
  220.     int v_count;
  221. } M_MOVE;
  222.  
  223. typedef struct event_struct
  224. {
  225.     int          is_mouse;
  226.     int            key;
  227.     int            mod;
  228.     int            m_x, m_y;
  229.     int          m_count, m_button;
  230. } EVENT;
  231.  
  232. /*---------------------------- rectangle structure -------------------------*/
  233. typedef struct rect_struct
  234. {
  235.     int x_min, x_max, y_min, y_max;                    /* rectangle coordinates                     */
  236. } RECT;
  237.  
  238.  
  239. /*--------------------------- window structure -----------------------------*/
  240. typedef struct w_struct
  241. {
  242.     struct w_struct    *next;                                    /* next window in linked list            */
  243.     struct w_struct    *previous;                            /* previous window in list                */
  244.     RECT                        pane;                   /* the window rectangle           */
  245.     RECT                        old_pane;               /* for full size toggle           */
  246.     int                            rows;                                        /* save buffer rows and columns        */
  247.     int                            cols;
  248.     int                         csr_x;                  /* the "soft" cursor location     */
  249.     int                         csr_y;
  250.     uchar                        att;                    /* the window's attribute         */
  251.     uchar                        bdr_att;                /* the window's border attribute  */
  252.     int                         bdr_style;              /* the border style               */
  253.     int                         name_loc;                                /* CENTERED, LEFTJUST, RIGHTJUST    */
  254.     char                        *name;                  /* pointer to window name         */
  255.     uchar                        *save;                                    /* pointer to save buffer area        */
  256.     uchar                        *buff;                                    /* pointer to write buffer area        */
  257.     uchar                        *mask;                                    /* pointer to window buffer mask    */
  258.  
  259.     uchar           *tabs;                                    /* tab stops                      */
  260.     int                            reg_s, reg_e;                        /* scroll region start and end        */
  261.  
  262.     unsigned                hidden            : 1;        /* 1 if window hidden             */
  263.     unsigned                overlapped    : 1;        /* 1 if window overlapped         */
  264.     unsigned                csr_adv            : 1;                /* 1 if cursor auto advanced      */
  265.     unsigned                 inside      : 1;                /* 1 if bordered and inside              */
  266.     unsigned                 mask_on     : 1;                /* 1 if window mask is active            */
  267.     unsigned                popup                :    1;                /* 1 if window is popup                        */
  268.     unsigned                 scroll      : 1;                /* 1 if window auto-scrolls                */
  269.     unsigned                bs_clear        : 1;                /* 1 if backspace is destructive    */
  270.  
  271.     unsigned                eol_wrap        : 1;                /* 1 if cursor wraps at end of ln */
  272.     unsigned                 mgr_flag    : 1;                /* 1 if win in manager's list          */
  273.     unsigned                 set_flag    : 1;                /* 1 if window is set on screen      */
  274.     unsigned                 cr_flag     : 1;                /* 1 if cr processed                */
  275.     unsigned                 lf_flag     : 1;                /* 1 if lf processed                */
  276.     unsigned                 cr_lf_flag  : 1;                /* 1 if cr or lf act as cr/lf pair*/
  277.     unsigned                 bk_flag     : 1;                /* 1 if backspace processed       */
  278.     unsigned                 tab_flag    : 1;                /* 1 if tab processed                */
  279.  
  280.     unsigned                 bell_flag   : 1;                /* 1 if bell char processed       */
  281.     unsigned                w_wrap            : 1;                /* 1 if word wrap on                          */
  282.     unsigned                unused            : 14;
  283.  
  284.     void            *usr_ptr;                 /* user expansion pointer         */
  285.     uchar           usr_exp[4];                            /* user expansion space                        */
  286.                                           /* DO NOT USE BELOW VARIABLES     */
  287.     void            *sys_ptr;               /* system expansion pointer       */
  288.     uchar           sys_exp[4];                          /* system expansion space                    */
  289. } WINDOW;
  290.  
  291. /*---------------------------- menu structure ------------------------------*/
  292. typedef struct menu_struct
  293. {
  294.     WINDOW        *wnp;                                                            /* the window for output            */
  295.     int                direction;                                              /* menu direction, vt or hz   */
  296.     int             num_entries;                                            /* number of entries in menu    */
  297.     uchar            csr_att;                                                    /* the cursor attribute                */
  298.     uchar            first_att;                                                /* the first letter attribute    */
  299.     int                csr_pos;                                                    /* current cursor position        */
  300.     uchar            first_pos[M_MAX_ENTRIES];                    /* first letter position      */
  301.     int             id[M_MAX_ENTRIES];                                /* id value for each entry        */
  302.     uchar            x[M_MAX_ENTRIES];                                    /* x location for each entry    */
  303.     char            *entry[M_MAX_ENTRIES];                        /* array of char pointers            */
  304. } MENU;
  305.  
  306. typedef struct printer
  307. {
  308.     int   active;                                            /* set to 1 if printer init'd/active    */
  309.     int   halt;                       /* set to 1 to temporarily stop printer */
  310.     int   prt_dev;                    /* file handle for printer device                */
  311.     char  device[81];                 /* name of printer device               */
  312.     int   prt_buff[2];                                /* file handles for printer buffer            */
  313.     char  buffer[81];                 /* name of printer buffer               */
  314.     int   cr_cnt;                     /* number of carriage returns to send   */
  315.     int   lf_cnt;                         /* number of line feeds to send         */
  316.     int   block_mode;                                    /* allows faster output on block devices*/
  317.  
  318.     long  max_que_size;                                /* maximum size of print que                      */
  319.     long  init_que_size;                            /* initial size of print que                        */
  320.     long  curr_que_size;                            /* current size of print que                        */
  321.     long  read;                                                /* print que read  index                */
  322.     long  write;                      /* print que write index                */
  323.     long  cnt;                           /* print que cnt (number of bytes in q) */
  324.  
  325.     uchar *que;                              /* pointer to print que data            */
  326.     uchar *xlat;                      /* pointer to translation table                    */
  327.     int   xlat_flag;                  /* translation flag                                            */
  328. } PRINT;
  329.  
  330. /*----------------------------- generic macros -----------------------------*/
  331. #define UW_FP_SEG(fp)     ((uint)((ulong)((void far *)(fp)) >> 16))
  332. #define UW_FP_OFF(fp)        ((uint)((void far *)(fp)))
  333. #define UW_MK_FP(seg,off) ((void far *)(((ulong)(seg)<<16) | (uint)(off)))
  334.  
  335. #define lower(x, y)          (((x) < (y)) ? (x) : (y))
  336. #define upper(x, y)          (((x) > (y)) ? (x) : (y))
  337. #define lobyte(c)              (uchar) ((c) & 0x00ff)
  338. #define hibyte(c)              (uchar) ((c) >> 8)
  339. #define range(l,b,h)    ((((b) >= (l)) && ((b) <= (h))))
  340. #define swap(a,b,c)          ( (c) = (a), (a) = (b), (b) = (c) )
  341.  
  342. #ifndef min
  343. #define min(x, y)              (((x) < (y)) ? (x) : (y))
  344. #define max(x, y)              (((x) > (y)) ? (x) : (y))
  345. #endif
  346.  
  347. /*------------------------- compatibility macros ---------------------------*/
  348. #define refresh_rect(rect)                    redisplay_rect(&(rect))
  349. #define rect_equal(rect1,rect2)            is_rect_equal(&(rect1), &(rect2))
  350. #define cr_inrect(c,r,rect)                    col_row_inrect(c, r, &(rect))
  351. #define add_window(wnp)                            link_window(wnp)
  352. #define remove_window(wnp)                    remove_window_ll(1, wnp)
  353.  
  354. /*----------------------------- window macros ------------------------------*/
  355. #ifndef ENQ_DEBUG
  356. #ifndef SOURCE_TRACE
  357. #define wn_att(a,wnp)             ( (wnp)->att = (a) )
  358. #define wn_color(f,b,wnp)          ( (wnp)->att = ((b) << 4) | (f) )
  359. #define wn_bdratt(a,wnp)          ( (wnp)->bdr_att = (a) )
  360. #define wn_bdr_color(f,b,wnp)    ( (wnp)->bdr_att = ((b) << 4) | (f) )
  361. #define mv_cs(c,r,wnp)                ( (wnp)->csr_x = (c), (wnp)->csr_y = (r) )
  362. #define wn_rqty(wnp)                    ( (wnp)->inside ? ((wnp)->rows - 2) : (wnp)->rows )
  363. #define wn_sqty(wnp)                    ( (wnp)->reg_e - (wnp)->reg_s )
  364. #define wn_cqty(wnp)                    ( (wnp)->inside ? ((wnp)->cols - 2) : (wnp)->cols )
  365. #define wn_name(n, wnp)                ( (wnp)->name = (n) )
  366. #define wn_name_loc(l, wnp)        ( (wnp)->name_loc = (l) )
  367. #define wn_save( wnp )                ( wn_io( IN, SAVE, (wnp)) )
  368. #define wn_restore( wnp )            ( wn_io(OUT, SAVE, (wnp)) )
  369. #define wn_rfsh( wnp )                ( wn_io(OUT, BUFF, (wnp)) )
  370. #define wn_read( wnp )                ( wn_io( IN, BUFF, (wnp)) )
  371.  
  372. #define wn_get_csr_x(wnp)           ((wnp)->csr_x)
  373. #define wn_get_csr_y(wnp)           ((wnp)->csr_y)
  374. #define wn_get_att(wnp)                 ((wnp)->att)
  375. #define wn_get_bdratt(wnp)             ((wnp)->bdr_att)
  376. #define wn_get_rows(wnp)                 ((wnp)->rows)
  377. #define wn_get_cols(wnp)               ((wnp)->cols)
  378. #define wn_get_bdr_style(wnp)         ((wnp)->bdr_style)
  379. #define wn_get_name_loc(wnp)           ((wnp)->name_loc)
  380.  
  381. #define wn_is_hidden(wnp)              ((wnp)->hidden)     
  382. #define wn_is_overlapped(wnp)       ((wnp)->overlapped) 
  383. #define wn_is_csr_adv(wnp)          ((wnp)->csr_adv)    
  384. #define wn_is_inside(wnp)           ((wnp)->inside)     
  385. #define wn_is_mask_on(wnp)          ((wnp)->mask_on)    
  386. #define wn_is_popup(wnp)              ((wnp)->popup)      
  387. #define wn_is_scroll(wnp)           ((wnp)->scroll)     
  388. #define wn_is_bs_clear(wnp)         ((wnp)->bs_clear)   
  389. #define wn_is_eol_wrap(wnp)         ((wnp)->eol_wrap)   
  390. #define wn_is_mgr_flag(wnp)         ((wnp)->mgr_flag)   
  391. #define wn_is_set_flag(wnp)         ((wnp)->set_flag)   
  392. #define wn_is_cr_flag(wnp)          ((wnp)->cr_flag)    
  393. #define wn_is_lf_flag(wnp)          ((wnp)->lf_flag)    
  394. #define wn_is_cr_lf_flag(wnp)       ((wnp)->cr_lf_flag) 
  395. #define wn_is_bk_flag(wnp)          ((wnp)->bk_flag)    
  396. #define wn_is_tab_flag(wnp)         ((wnp)->tab_flag)   
  397. #define wn_is_bell_flag(wnp)        ((wnp)->bell_flag)  
  398. #define wn_is_w_wrap(wnp)           ((wnp)->w_wrap)     
  399.  
  400. #define wn_set_csr_x(x,wnp)            ((wnp)->csr_x = x)
  401. #define wn_set_csr_y(y,wnp)            ((wnp)->csr_y = y)
  402. #define wn_set_bdr_style(state,wnp)      ((wnp)->bdr_style = state)
  403. #define wn_set_name_loc(state,wnp)        ((wnp)->name_loc = state)
  404. #define wn_set_hidden(state,wnp)         ((wnp)->hidden = state)
  405. #define wn_set_overlapped(state,wnp)   ((wnp)->overlapped = state)
  406. #define wn_set_csr_adv(state,wnp)      ((wnp)->csr_adv = state)
  407. #define wn_set_inside(state,wnp)       ((wnp)->inside = state)
  408. #define wn_set_mask_on(state,wnp)      ((wnp)->mask_on = state)
  409. #define wn_set_popup(state,wnp)           ((wnp)->popup = state)
  410. #define wn_set_scroll(state,wnp)       ((wnp)->scroll = state)
  411. #define wn_set_bs_clear(state,wnp)     ((wnp)->bs_clear = state)
  412. #define wn_set_eol_wrap(state,wnp)     ((wnp)->eol_wrap = state)
  413. #define wn_set_mgr_flag(state,wnp)     ((wnp)->mgr_flag = state)
  414. #define wn_set_set_flag(state,wnp)     ((wnp)->set_flag = state)
  415. #define wn_set_cr_flag(state,wnp)      ((wnp)->cr_flag = state)
  416. #define wn_set_lf_flag(state,wnp)      ((wnp)->lf_flag = state)
  417. #define wn_set_cr_lf_flag(state,wnp)   ((wnp)->cr_lf_flag = state)
  418. #define wn_set_bk_flag(state,wnp)      ((wnp)->bk_flag = state)
  419. #define wn_set_tab_flag(state,wnp)     ((wnp)->tab_flag = state)
  420. #define wn_set_bell_flag(state,wnp)    ((wnp)->bell_flag = state)
  421. #define wn_set_w_wrap(state,wnp)       ((wnp)->w_wrap = state)
  422. #endif
  423. #endif
  424.  
  425. #define cls()                                    ( setmem(Screen, V_cols * V_rows * 2, 0) )
  426. #define push(x)                              ( Stack[Stack_ptr++] = (x) )
  427. #define pop(x)                               ( (x) = Stack[--Stack_ptr] )
  428.  
  429. #ifdef UW_GLOB_INC
  430. #include "uw_glob.h"
  431. #else
  432. #include "uw_globx.h"
  433. #endif
  434. #include "uw_keys.h"
  435. #include "uw_proto.h"
  436. #include "uw_dbg.h"
  437.  
  438. #endif     /* __UW_H */
  439.  
  440. /**** END OF FILE ****/
  441.